Skip to main content

DNS 基础

DNS(Domain Name System)是将域名解析为 IP 地址的系统。它是我们日常访问网站时背后的关键技术之一。


🌐 什么是 DNS?

DNS 作用就像互联网的“电话簿”:
当你访问 www.google.com 时,DNS 会告诉你的电脑它对应的 IP 地址(例如 142.250.72.36)。


🔁 DNS 解析流程

  1. 浏览器输入网址,例如 www.example.com
  2. 操作系统查找本地 DNS 缓存
  3. 若没有缓存,则请求递归 DNS 服务器(通常是运营商或 8.8.8.8)
  4. 递归 DNS 按顺序向以下服务器查询:
根域名服务器 → 顶级域(.com) → 权威域名服务器 → 返回 IP
🌍 示例流程
  • 输入:www.example.com
  • 查询根服务器 → 得到 .com 顶级服务器地址
  • 查询 .com → 得到 example.com 的权威服务器
  • 权威服务器 → 返回 www.example.com 的 IP 地址

📘 常见 DNS 记录类型

类型说明示例
A映射到 IPv4 地址example.com → 123.123.123.123
AAAA映射到 IPv6 地址example.com → 2001:db8::1
CNAME别名www.example.com → example.com
MX邮件服务器mail.example.com
TXT文本记录域名验证、SPF 等

🛠️ 编程/部署中的常见 DNS 使用场景

✅ 1. 项目上线绑定域名

部署平台(如 Vercel、AWS)提供临时域名或 IP,使用域名服务商设置:

  • A 记录 → 绑定到 IP
  • CNAME → 指向平台分配的域名

✅ 2. 修改本地 hosts 文件测试 DNS

# 在 hosts 文件中加入(开发用)
127.0.0.1 api.local.test

之后就可以访问 http://api.local.test → 实际映射到本地服务。


🔍 常用 DNS 命令

ipconfig /flushdns      # 清空 DNS 缓存
ipconfig /displaydns # 查看 DNS 缓存
nslookup www.baidu.com # 查询域名解析

🧪 示例:使用 Python 查询 DNS 记录

import socket

domain = "www.example.com"
ip = socket.gethostbyname(domain)
print(f"{domain} 的 IP 地址为:{ip}")

❗ 常见 DNS 问题排查

问题原因
ERR_NAME_NOT_RESOLVED域名拼错或没有 DNS 记录
域名解析不生效DNS 传播延迟(最长 48 小时)
能 ping IP 但不能访问域名DNS 解析异常或被劫持

✅ 小结回顾

关键词说明
DNS域名解析系统
A/CNAME将域名映射到 IP 或另一个域名
权威服务器最终控制域名解析的服务器
递归查询DNS 服务器逐级帮你找到最终地址

📚 推荐阅读